from PIL import Image
import os

def split_image(image_name):
    """
    将图片分割成 4x4 的小图片
    
    Args:
        image_name: 图片文件名（位于 images 文件夹中）
    """
    try:
        # 获取当前脚本所在目录
        current_dir = os.path.dirname(os.path.abspath(__file__))
        image_dir = os.path.join(current_dir, 'images')
        output_dir = os.path.join(image_dir, 'split')
        
        # 构建完整的文件路径
        image_path = os.path.join(image_dir, image_name)
        
        # 检查源文件是否存在
        if not os.path.exists(image_path):
            print(f"错误：文件 {image_name} 不存在于 images 文件夹中")
            return
        
        # 如果输出目录不存在，创建它
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)
        
        # 打开图片
        img = Image.open(image_path)
        
        # 获取原图尺寸
        width, height = img.size
        
        # 计算每个小图片的尺寸
        sub_width = width // 3
        sub_height = height // 3
        
        # 分割并保存小图片
        for i in range(3):
            for j in range(3):
                # 计算当前小图片的区域
                left = j * sub_width
                top = i * sub_height
                right = left + sub_width
                bottom = top + sub_height
                
                # 裁剪图片
                sub_img = img.crop((left, top, right, bottom))
                
                # 构建输出文件名
                output_name = f"{os.path.splitext(image_name)[0]}_{i}_{j}{os.path.splitext(image_name)[1]}"
                output_path = os.path.join(output_dir, output_name)
                
                # 保存小图片
                sub_img.save(output_path)
                print(f"已保存: {output_name}")
        
        print("\n分割完成！")
        print(f"原图尺寸: {width}x{height}")
        print(f"子图尺寸: {sub_width}x{sub_height}")
        print(f"输出目录: {output_dir}")
        
    except Exception as e:
        print(f"程序执行出错: {str(e)}")

if __name__ == '__main__':
    # 指定要分割的图片文件名
    image_name = "DJI_20250428150156_0043_V.jpeg"  # 替换为你的图片文件名
    split_image(image_name)